//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS LicenseManagerLinuxSubscriptions service.
///
/// With License Manager, you can discover and track your commercial Linux subscriptions on running Amazon EC2 instances.
public struct LicenseManagerLinuxSubscriptions: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the LicenseManagerLinuxSubscriptions client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "LicenseManagerLinuxSubscriptions",
            serviceIdentifier: "license-manager-linux-subscriptions",
            serviceProtocol: .restjson,
            apiVersion: "2018-05-10",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: LicenseManagerLinuxSubscriptionsErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-east-1": "license-manager-linux-subscriptions-fips.us-east-1.amazonaws.com",
            "us-east-2": "license-manager-linux-subscriptions-fips.us-east-2.amazonaws.com",
            "us-west-1": "license-manager-linux-subscriptions-fips.us-west-1.amazonaws.com",
            "us-west-2": "license-manager-linux-subscriptions-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Remove a third-party subscription provider from the Bring Your Own License (BYOL) subscriptions
    /// 			registered to your account.
    @Sendable
    @inlinable
    public func deregisterSubscriptionProvider(_ input: DeregisterSubscriptionProviderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterSubscriptionProviderResponse {
        try await self.client.execute(
            operation: "DeregisterSubscriptionProvider", 
            path: "/subscription/DeregisterSubscriptionProvider", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove a third-party subscription provider from the Bring Your Own License (BYOL) subscriptions
    /// 			registered to your account.
    ///
    /// Parameters:
    ///   - subscriptionProviderArn: The Amazon Resource Name (ARN) of the subscription provider resource to deregister.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterSubscriptionProvider(
        subscriptionProviderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterSubscriptionProviderResponse {
        let input = DeregisterSubscriptionProviderRequest(
            subscriptionProviderArn: subscriptionProviderArn
        )
        return try await self.deregisterSubscriptionProvider(input, logger: logger)
    }

    /// Get details for a Bring Your Own License (BYOL) subscription that's registered to your account.
    @Sendable
    @inlinable
    public func getRegisteredSubscriptionProvider(_ input: GetRegisteredSubscriptionProviderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRegisteredSubscriptionProviderResponse {
        try await self.client.execute(
            operation: "GetRegisteredSubscriptionProvider", 
            path: "/subscription/GetRegisteredSubscriptionProvider", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get details for a Bring Your Own License (BYOL) subscription that's registered to your account.
    ///
    /// Parameters:
    ///   - subscriptionProviderArn: The Amazon Resource Name (ARN) of the BYOL registration resource to get details for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRegisteredSubscriptionProvider(
        subscriptionProviderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRegisteredSubscriptionProviderResponse {
        let input = GetRegisteredSubscriptionProviderRequest(
            subscriptionProviderArn: subscriptionProviderArn
        )
        return try await self.getRegisteredSubscriptionProvider(input, logger: logger)
    }

    /// Lists the Linux subscriptions service settings for your account.
    @Sendable
    @inlinable
    public func getServiceSettings(_ input: GetServiceSettingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetServiceSettingsResponse {
        try await self.client.execute(
            operation: "GetServiceSettings", 
            path: "/subscription/GetServiceSettings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Linux subscriptions service settings for your account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getServiceSettings(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetServiceSettingsResponse {
        let input = GetServiceSettingsRequest(
        )
        return try await self.getServiceSettings(input, logger: logger)
    }

    /// Lists the running Amazon EC2 instances that were discovered with commercial Linux subscriptions.
    @Sendable
    @inlinable
    public func listLinuxSubscriptionInstances(_ input: ListLinuxSubscriptionInstancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListLinuxSubscriptionInstancesResponse {
        try await self.client.execute(
            operation: "ListLinuxSubscriptionInstances", 
            path: "/subscription/ListLinuxSubscriptionInstances", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the running Amazon EC2 instances that were discovered with commercial Linux subscriptions.
    ///
    /// Parameters:
    ///   - filters: An array of structures that you can use to filter the results by your specified criteria.  	For example, you can specify Region in the Name, with the  	contains operator to list all subscriptions that match a partial string in the  	Value, such as us-west. For each filter, you can specify one of the following values for the Name key  	to streamline results:    AccountID     AmiID     DualSubscription     InstanceID     InstanceType     ProductCode     Region     Status     UsageOperation    For each filter, you can use one of the following Operator values to  		define the behavior of the filter:    contains     equals     Notequal
    ///   - maxResults: The maximum items to return in a request.
    ///   - nextToken: A token to specify where to start paginating. This
    ///   - logger: Logger use during operation
    @inlinable
    public func listLinuxSubscriptionInstances(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListLinuxSubscriptionInstancesResponse {
        let input = ListLinuxSubscriptionInstancesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listLinuxSubscriptionInstances(input, logger: logger)
    }

    /// Lists the Linux subscriptions that have been discovered. If you have linked your organization, the returned results will include data aggregated across your accounts in Organizations.
    @Sendable
    @inlinable
    public func listLinuxSubscriptions(_ input: ListLinuxSubscriptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListLinuxSubscriptionsResponse {
        try await self.client.execute(
            operation: "ListLinuxSubscriptions", 
            path: "/subscription/ListLinuxSubscriptions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Linux subscriptions that have been discovered. If you have linked your organization, the returned results will include data aggregated across your accounts in Organizations.
    ///
    /// Parameters:
    ///   - filters: An array of structures that you can use to filter the results to those that match one or more sets of key-value pairs that you specify. For example, you can filter by the name of Subscription with an optional operator to see subscriptions that match, partially match, or don't match a certain subscription's name. The valid names for this filter are:    Subscription    The valid Operators for this filter are:    contains     equals     Notequal
    ///   - maxResults: The maximum items to return in a request.
    ///   - nextToken: A token to specify where to start paginating. This
    ///   - logger: Logger use during operation
    @inlinable
    public func listLinuxSubscriptions(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListLinuxSubscriptionsResponse {
        let input = ListLinuxSubscriptionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listLinuxSubscriptions(input, logger: logger)
    }

    /// List Bring Your Own License (BYOL) subscription registration resources for your account.
    @Sendable
    @inlinable
    public func listRegisteredSubscriptionProviders(_ input: ListRegisteredSubscriptionProvidersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRegisteredSubscriptionProvidersResponse {
        try await self.client.execute(
            operation: "ListRegisteredSubscriptionProviders", 
            path: "/subscription/ListRegisteredSubscriptionProviders", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List Bring Your Own License (BYOL) subscription registration resources for your account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum items to return in a request.
    ///   - nextToken: A token to specify where to start paginating. This
    ///   - subscriptionProviderSources: To filter your results, specify which subscription providers to return
    ///   - logger: Logger use during operation
    @inlinable
    public func listRegisteredSubscriptionProviders(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        subscriptionProviderSources: [SubscriptionProviderSource]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRegisteredSubscriptionProvidersResponse {
        let input = ListRegisteredSubscriptionProvidersRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            subscriptionProviderSources: subscriptionProviderSources
        )
        return try await self.listRegisteredSubscriptionProviders(input, logger: logger)
    }

    /// List the metadata tags that are assigned to the
    /// 			specified Amazon Web Services resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the metadata tags that are assigned to the
    /// 			specified Amazon Web Services resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource for which to list metadata tags.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Register the supported third-party subscription provider for your Bring Your Own License (BYOL) subscription.
    @Sendable
    @inlinable
    public func registerSubscriptionProvider(_ input: RegisterSubscriptionProviderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterSubscriptionProviderResponse {
        try await self.client.execute(
            operation: "RegisterSubscriptionProvider", 
            path: "/subscription/RegisterSubscriptionProvider", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Register the supported third-party subscription provider for your Bring Your Own License (BYOL) subscription.
    ///
    /// Parameters:
    ///   - secretArn: The Amazon Resource Name (ARN) of the secret where you've stored your subscription provider's access token. For
    ///   - subscriptionProviderSource: The supported Linux subscription provider to register.
    ///   - tags: The metadata tags to assign to your registered Linux subscription provider
    ///   - logger: Logger use during operation
    @inlinable
    public func registerSubscriptionProvider(
        secretArn: String,
        subscriptionProviderSource: SubscriptionProviderSource,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterSubscriptionProviderResponse {
        let input = RegisterSubscriptionProviderRequest(
            secretArn: secretArn, 
            subscriptionProviderSource: subscriptionProviderSource, 
            tags: tags
        )
        return try await self.registerSubscriptionProvider(input, logger: logger)
    }

    /// Add metadata tags to the specified Amazon Web Services resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add metadata tags to the specified Amazon Web Services resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the Amazon Web Services resource to which to add the specified
    ///   - tags: The metadata tags to assign to the Amazon Web Services resource. Tags are
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Remove one or more metadata tag from the specified Amazon Web Services resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove one or more metadata tag from the specified Amazon Web Services resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the Amazon Web Services resource to remove the metadata tags from.
    ///   - tagKeys: A list of metadata tag keys to remove from the requested
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the service settings for Linux subscriptions.
    @Sendable
    @inlinable
    public func updateServiceSettings(_ input: UpdateServiceSettingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateServiceSettingsResponse {
        try await self.client.execute(
            operation: "UpdateServiceSettings", 
            path: "/subscription/UpdateServiceSettings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the service settings for Linux subscriptions.
    ///
    /// Parameters:
    ///   - allowUpdate: Describes if updates are allowed to the service settings for Linux subscriptions. If you allow updates, you can aggregate Linux subscription data in more than one home Region.
    ///   - linuxSubscriptionsDiscovery: Describes if the discovery of Linux subscriptions is enabled.
    ///   - linuxSubscriptionsDiscoverySettings: The settings defined for Linux subscriptions discovery. The settings include if Organizations integration has been enabled, and which Regions data will be aggregated from.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateServiceSettings(
        allowUpdate: Bool? = nil,
        linuxSubscriptionsDiscovery: LinuxSubscriptionsDiscovery,
        linuxSubscriptionsDiscoverySettings: LinuxSubscriptionsDiscoverySettings,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateServiceSettingsResponse {
        let input = UpdateServiceSettingsRequest(
            allowUpdate: allowUpdate, 
            linuxSubscriptionsDiscovery: linuxSubscriptionsDiscovery, 
            linuxSubscriptionsDiscoverySettings: linuxSubscriptionsDiscoverySettings
        )
        return try await self.updateServiceSettings(input, logger: logger)
    }
}

extension LicenseManagerLinuxSubscriptions {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: LicenseManagerLinuxSubscriptions, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension LicenseManagerLinuxSubscriptions {
    /// Return PaginatorSequence for operation ``listLinuxSubscriptionInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listLinuxSubscriptionInstancesPaginator(
        _ input: ListLinuxSubscriptionInstancesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListLinuxSubscriptionInstancesRequest, ListLinuxSubscriptionInstancesResponse> {
        return .init(
            input: input,
            command: self.listLinuxSubscriptionInstances,
            inputKey: \ListLinuxSubscriptionInstancesRequest.nextToken,
            outputKey: \ListLinuxSubscriptionInstancesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listLinuxSubscriptionInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: An array of structures that you can use to filter the results by your specified criteria.  	For example, you can specify Region in the Name, with the  	contains operator to list all subscriptions that match a partial string in the  	Value, such as us-west. For each filter, you can specify one of the following values for the Name key  	to streamline results:    AccountID     AmiID     DualSubscription     InstanceID     InstanceType     ProductCode     Region     Status     UsageOperation    For each filter, you can use one of the following Operator values to  		define the behavior of the filter:    contains     equals     Notequal
    ///   - maxResults: The maximum items to return in a request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listLinuxSubscriptionInstancesPaginator(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListLinuxSubscriptionInstancesRequest, ListLinuxSubscriptionInstancesResponse> {
        let input = ListLinuxSubscriptionInstancesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listLinuxSubscriptionInstancesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listLinuxSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listLinuxSubscriptionsPaginator(
        _ input: ListLinuxSubscriptionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListLinuxSubscriptionsRequest, ListLinuxSubscriptionsResponse> {
        return .init(
            input: input,
            command: self.listLinuxSubscriptions,
            inputKey: \ListLinuxSubscriptionsRequest.nextToken,
            outputKey: \ListLinuxSubscriptionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listLinuxSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: An array of structures that you can use to filter the results to those that match one or more sets of key-value pairs that you specify. For example, you can filter by the name of Subscription with an optional operator to see subscriptions that match, partially match, or don't match a certain subscription's name. The valid names for this filter are:    Subscription    The valid Operators for this filter are:    contains     equals     Notequal
    ///   - maxResults: The maximum items to return in a request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listLinuxSubscriptionsPaginator(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListLinuxSubscriptionsRequest, ListLinuxSubscriptionsResponse> {
        let input = ListLinuxSubscriptionsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listLinuxSubscriptionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRegisteredSubscriptionProviders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRegisteredSubscriptionProvidersPaginator(
        _ input: ListRegisteredSubscriptionProvidersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRegisteredSubscriptionProvidersRequest, ListRegisteredSubscriptionProvidersResponse> {
        return .init(
            input: input,
            command: self.listRegisteredSubscriptionProviders,
            inputKey: \ListRegisteredSubscriptionProvidersRequest.nextToken,
            outputKey: \ListRegisteredSubscriptionProvidersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRegisteredSubscriptionProviders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum items to return in a request.
    ///   - subscriptionProviderSources: To filter your results, specify which subscription providers to return
    ///   - logger: Logger used for logging
    @inlinable
    public func listRegisteredSubscriptionProvidersPaginator(
        maxResults: Int? = nil,
        subscriptionProviderSources: [SubscriptionProviderSource]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRegisteredSubscriptionProvidersRequest, ListRegisteredSubscriptionProvidersResponse> {
        let input = ListRegisteredSubscriptionProvidersRequest(
            maxResults: maxResults, 
            subscriptionProviderSources: subscriptionProviderSources
        )
        return self.listRegisteredSubscriptionProvidersPaginator(input, logger: logger)
    }
}

extension LicenseManagerLinuxSubscriptions.ListLinuxSubscriptionInstancesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> LicenseManagerLinuxSubscriptions.ListLinuxSubscriptionInstancesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension LicenseManagerLinuxSubscriptions.ListLinuxSubscriptionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> LicenseManagerLinuxSubscriptions.ListLinuxSubscriptionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension LicenseManagerLinuxSubscriptions.ListRegisteredSubscriptionProvidersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> LicenseManagerLinuxSubscriptions.ListRegisteredSubscriptionProvidersRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            subscriptionProviderSources: self.subscriptionProviderSources
        )
    }
}
